/* These are most of the viper instructions. 
 * Documentation can be found here:
 * https://docs.google.com/document/d/1gHmMi08QN4E7LuVhQU9dWm-3U1irUfwIEHVI2iKyiu8/edit#
 */

#define PUSH 		0x01
#define POP 		0x02
#define LOAD 		0x07
#define STORE 		0x08
#define BEQ 		0x09
#define BNE 		0x0A
#define BGT 		0x0B
#define BLT 		0x0C
#define BZ 		0x0D
#define BNZ 		0xF0
#define BRA 		0x0F
#define BSR 		0x10
#define FADD 		0x11
#define ADD 		0x12
#define FSUB 		0x13
#define SUB 		0x14
#define FMUL 		0x15
#define MUL 		0x16
#define FDIV 		0x17
#define DIV 		0x18
#define SYSF 		0x27
#define MOD		0x25
#define BRK 		0xFF
#define MUL_S 		0x31
#define DIV_S 		0x30
#define TEQ 		0x39
#define TNE 		0x40
#define TGT 		0x44
#define TLT 		0x46
#define TGT_S 		0x45
#define TLT_S 		0x47
#define TGT_F 		0x48
#define TLT_F 		0x49
#define BEGIN_FAULT 	0x50
#define END_FAULT 	0x51
#define THROW 		0x52
#define AND 		0x32
#define BOR		0x33
#define XOR		0x34
#define SHL		0x35
#define SHL_S		0x36
#define SHR		0x37
#define SHR_S		0x38
#define RET		0x28
#define LDELEM_B	0x5A
#define LDELEM_W	0x5B
#define LDELEM_D	0x5C
#define LDELEM_Q	0x5D
#define STELEM_Q	0x63
#define STELEM_D	0x60
#define STELEM_W	0x5F
#define STELEM_B	0x5E
#define DUP		0x59
#define CONVD_B		0x61
#define CONVB_D		0x54
#define HEAPALLOC	0x29
#define HEAPFREE	0x62
#define STACKALLOC	0x05
